package com.jdy.singleton;

import com.jdy.singleton.lazy.LazyInnerClassSingleton;

import java.lang.reflect.Constructor;


/**
 * 常用工具包
 * <p>
 * [Description]
 * <p>
 * 创建人 Dale 时间 2019/10/18 20:32
 */
public class ReflectTest {

    public static void main(String[] args) {
        /**
         * 反射破坏内部内单例模式
         */
        Class<?> clazz = LazyInnerClassSingleton.class;
        try {
            Constructor<?> constructor = clazz.getDeclaredConstructor(null);
            constructor.setAccessible(true);
            Object o = constructor.newInstance(null);
            LazyInnerClassSingleton instance = LazyInnerClassSingleton.getInstance();
            System.out.println("反射调用单例 ： " + o + ",   正常使用单例 ： " + instance);
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    public int function(int n){
        //0的阶乘为1
        return n == 0 ? 1 : function(n--) * n;
    }
}
